package de.fhhannover.inform.wari.grp8.gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/**
 * @author Oleg Starodubtsev createt 9.11.2008 aktualisiert am 10.11.2008 Es war
 *         schowMessageDialog und Mnemonic eingefuegt. Constructor wartet auf
 *         die Farbe des Hintergrundes als Parameter.
 */
@SuppressWarnings("serial")
public class NewGamePopupDialog extends JFrame implements ActionListener {
	// Attrebutendefinition
	private JPanel mPanel1;
	private JLabel mModiLabel;
	private JSeparator separator2;
	private JRadioButton mKgKradioButton;
	private JRadioButton mKgMradioButton;
	private JRadioButton mMgMradioButton;
	private JLabel mStarterLabel;
	private JSeparator separator1;
	private JRadioButton mKiRadioButton;
	private JRadioButton mMenschRadioButton;
	private JLabel mNameLabel;
	private JSeparator separator3;
	private JLabel mSpielerAlabel;
	private JTextField mSpielerAtextField;
	private JLabel mSpielerBlabel;
	private JTextField mSpielerBtextField;
	private JButton mOkButton;
	private JButton mAbbrechenButton;
	private ButtonGroup mModiButtonGroup;
	private ButtonGroup mSpielstartButtonGroup;
	private Gui_Controller mGCtrl = null;

	// Attributdefinition Ende

	public NewGamePopupDialog(Gui_Controller gCtrl) {
		mGCtrl = gCtrl;
		setSize(315, 350);
		initComponents();
		positionComponents();
		settingComponents();
		kiGegenMensch();
	}

	private void initComponents() {
		mPanel1 = new JPanel();
		mPanel1.setLayout(null);
		setTitle("Spieleinstellungen");
		setLocation(170, 100);
		getContentPane().add(mPanel1);
		mModiButtonGroup = new ButtonGroup();
		mSpielstartButtonGroup = new ButtonGroup();
		mModiLabel = new JLabel("Modi");
		separator2 = new JSeparator();
		mKgKradioButton = new JRadioButton("KI gegen KI");
		mKgMradioButton = new JRadioButton("KI gegen Mensch", true);
		mMgMradioButton = new JRadioButton("Mensch gegen Mensch");
		mStarterLabel = new JLabel("Starter");
		separator1 = new JSeparator();
		mKiRadioButton = new JRadioButton("KI");
		mMenschRadioButton = new JRadioButton("Spieler", true);
		mNameLabel = new JLabel("Name");
		separator3 = new JSeparator();
		mSpielerAlabel = new JLabel("Spieler A");
		mSpielerAtextField = new JTextField();
		mSpielerBlabel = new JLabel("Spieler B");
		mSpielerBtextField = new JTextField();
		mOkButton = new JButton("Ok");
		mAbbrechenButton = new JButton("Abbrechen");
	}

	private void positionComponents() {
		// ======== panel1 ========

		// ---- mModiLabel1 ----
		mPanel1.add(mModiLabel);
		mModiLabel.setBounds(20, 15, 42, mModiLabel.getPreferredSize().height);
		mPanel1.add(separator2);
		separator2.setBounds(67, 21, 213, separator2.getPreferredSize().height);

		// ---- mKgKradioButton ----
		mPanel1.add(mKgKradioButton);
		mKgKradioButton.setBounds(117, 34, 143, mKgKradioButton
				.getPreferredSize().height);

		// ---- mKgMradioButton ----
		mPanel1.add(mKgMradioButton);
		mKgMradioButton.setBounds(117, 62, 143, mKgMradioButton
				.getPreferredSize().height);

		// ---- mMgMradioButton ----
		mPanel1.add(mMgMradioButton);
		mMgMradioButton.setBounds(117, 90, 158, mMgMradioButton
				.getPreferredSize().height);

		// ---- mStarterLabel ----
		mPanel1.add(mStarterLabel);
		mStarterLabel.setBounds(20, 118, 42,
				mStarterLabel.getPreferredSize().height);
		mPanel1.add(separator1);
		separator1
				.setBounds(67, 124, 213, separator1.getPreferredSize().height);

		// ---- mKiRadioButton ----
		mPanel1.add(mKiRadioButton);
		mKiRadioButton.setBounds(117, 137, 143, mKiRadioButton
				.getPreferredSize().height);

		// ---- mMenschRadioButton ----
		mPanel1.add(mMenschRadioButton);
		mMenschRadioButton.setBounds(117, 165, 143, mMenschRadioButton
				.getPreferredSize().height);

		// ---- mNameLabel ----
		mPanel1.add(mNameLabel);
		mNameLabel.setBounds(20, 193, 42, mNameLabel.getPreferredSize().height);
		mPanel1.add(separator3);
		separator3
				.setBounds(67, 199, 213, separator3.getPreferredSize().height);

		// ---- mSpielerAlabel ----
		mPanel1.add(mSpielerAlabel);
		mSpielerAlabel.setBounds(20, 219, 55,
				mSpielerAlabel.getPreferredSize().height);
		mPanel1.add(mSpielerAtextField);
		mSpielerAtextField.setBounds(117, 216, 143, mSpielerAtextField
				.getPreferredSize().height);

		// ---- mSpielerBlabel ----
		mPanel1.add(mSpielerBlabel);
		mSpielerBlabel.setBounds(20, 244, 55,
				mSpielerBlabel.getPreferredSize().height);
		mPanel1.add(mSpielerBtextField);
		mSpielerBtextField.setBounds(117, 241, 143, mSpielerBtextField
				.getPreferredSize().height);

		// ---- mOkButton ----
		mPanel1.add(mOkButton);
		mOkButton.setBounds(new Rectangle(new Point(67, 266), mOkButton
				.getPreferredSize()));

		// ---- mAbbrechenButton ----
		mPanel1.add(mAbbrechenButton);
		mAbbrechenButton.setBounds(117, 266, 143, mAbbrechenButton
				.getPreferredSize().height);
	}

	private void settingComponents() {
		mPanel1.setBackground(mGCtrl.getColor());
		mKgKradioButton.setBackground(mGCtrl.getColor());
		mKgMradioButton.setBackground(mGCtrl.getColor());
		mMgMradioButton.setBackground(mGCtrl.getColor());
		mModiButtonGroup.add(mKgKradioButton);
		mModiButtonGroup.add(mKgMradioButton);
		mModiButtonGroup.add(mMgMradioButton);

		mKgKradioButton.addActionListener(this);
		mKgMradioButton.addActionListener(this);
		mMgMradioButton.addActionListener(this);
		mKiRadioButton.addActionListener(this);
		mMenschRadioButton.addActionListener(this);

		mKiRadioButton.setBackground(mGCtrl.getColor());
		mMenschRadioButton.setBackground(mGCtrl.getColor());
		mSpielstartButtonGroup.add(mKiRadioButton);
		mSpielstartButtonGroup.add(mMenschRadioButton);

		mOkButton.addActionListener(this);
		mAbbrechenButton.addActionListener(this);

		mOkButton.setMnemonic('O');
		mAbbrechenButton.setMnemonic('A');

	}

	private void kiGegenKi() {
		mSpielerAtextField.setText("KI A");
		mSpielerBtextField.setText("KI B");
		mSpielerAlabel.setText("KI A");
		mSpielerBlabel.setText("KI B");
		mSpielerAtextField.setText("KI A");
		mSpielerBtextField.setText("KI B");
		mKiRadioButton.setText("KI B");
		mMenschRadioButton.setText("KI A");
		mMenschRadioButton.setSelected(true);
		mKgKradioButton.setSelected(true);
	}

	private void kiGegenMensch() {
		mSpielerAtextField.setText("Spieler");
		mSpielerBtextField.setText("KI");
		mMenschRadioButton.setText("Spieler");
		mKiRadioButton.setText("KI");
		mSpielerAlabel.setText("Spieler");
		mSpielerBlabel.setText("KI");
		mMenschRadioButton.setSelected(true);
		mKgMradioButton.setSelected(true);
	}

	private void menschGegenMensch() {
		mSpielerAtextField.setText("Spieler A");
		mSpielerBtextField.setText("Spieler B");
		mSpielerAlabel.setText("Spieler A");
		mSpielerBlabel.setText("Spieler B");
		mMenschRadioButton.setText("Spieler A");
		mKiRadioButton.setText("Spieler B");
		mMenschRadioButton.setSelected(true);
		mMgMradioButton.setSelected(true);
	}

	public void actionPerformed(ActionEvent arg0) {
		String command = arg0.getActionCommand();
		if (command.equals("KI gegen KI")) {
			kiGegenKi();
		} else if (command.equals("KI gegen Mensch")) {
			kiGegenMensch();
		} else if (command.equals("Mensch gegen Mensch")) {
			menschGegenMensch();
		} else if (command.equals("Abbrechen")) {
			this.dispose();
		} else if (command.equals("Ok")) {
			int modi = 0;
			// edited by michi 18.11, startet A true startet B false
			boolean starter = false;
			String spielerA = mSpielerAtextField.getText();
			String spielerB = mSpielerBtextField.getText();

			if (mKgKradioButton.isSelected())
				modi = 0;
			else if (mKgMradioButton.isSelected())
				modi = 1;
			else if (mMgMradioButton.isSelected())
				modi = 2;

			if (mMenschRadioButton.isSelected())
				starter = true; // unten true = spieler a

			switch (modi) {
			case 0:
				if (spielerA.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer KI A ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerB.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer KI B ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerA.equals(spielerB)) {
					JOptionPane.showMessageDialog(null,
							"KI B heisst genau so, wie KI A",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				mGCtrl.savePreferences(true, true, spielerA, spielerB, starter); // Mensch
				// gegen
				// Mensch;
				// Starte:
				// ich
				break;
			case 1:
				if (spielerB.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer KI ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerA.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer Spieler ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerA.equals(spielerB)) {
					JOptionPane.showMessageDialog(null,
							"KI heisst genau so, wie Spieler",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				mGCtrl
						.savePreferences(false, true, spielerA, spielerB,
								starter); // Mensch gegen Mensch; Starte: ich
				break;
			case 2:
				if (spielerA.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer Spieler A ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerB.equals("")) {
					JOptionPane.showMessageDialog(null,
							"Geben Sie den Name fuer Spieler B ein!",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}

				if (spielerA.equals(spielerB)) {
					JOptionPane.showMessageDialog(null,
							"Spieler B heisst genau so, wie Spieler A",
							"Wichtige Mitteilung", JOptionPane.WARNING_MESSAGE);
					break;
				}
				mGCtrl.savePreferences(false, false, spielerA, spielerB,
						starter); // Mensch gegen Mensch; Starte: ich
				break;
			}
			// mGCtrl.menschGegen Mensch.(Spieler A, Spieser B, Anfaenger 0 fuer
			// A und 1 fuer b)
			// Methode(mSpielerAtextField.getText(),
			// mSpielerBtextField.getText());
		}
	}
}
